FILESOFT QUOTE PRICE HISTORY — 0.1.0
Owner review example · 28 October 2026

OPEN THIS FILE
Filesoft Quote Price History_0.1.0.fmp12
Use FileMaker Pro 26 on your Mac. This example has a minimum version of 26.0.
It is unlocked; if a sign-in appears, use Admin with an empty password.
Click Load example and confirm Load each time you open the file. This initializes
an empty file once, or reloads saved catalogue values without deleting history.

This is a small, independent teaching file, not Sales Starter or a production
quoting system. It has not yet passed your native visual/interaction review.
No article has been written or published. No existing customer file was changed.

WHAT IT TEACHES
Products own current catalogue descriptions and prices. Quote lines own copied
product IDs, agreed descriptions, quantities and prices. Existing drafts and
issued documents do not automatically change when the catalogue is edited.
Issue freezes the SAVED draft values through the example's normal interface.
An explicit revision is a separate draft linked to its original document.

The file starts without business records. Load example creates two fictional
products: LAMP / Desk lamp / $40 and MAT / Desk mat / $20. New quote creates one
saved draft with two lamps and one mat. Each quote has exactly two line slots.
There is no customer, tax, discount, invoice, payment or PDF workflow.

MAIN WALKTHROUGH — $100, $110, $104
QP-01. Load example. Confirm LAMP = Desk lamp / 40 / Available 1 and MAT = Desk mat
       / 20 / Available 1. Click New quote, then Create. Expected: Q-001 / r1,
       Draft, $100. Two lamps at $40 plus one mat at $20.
QP-02. Click Issue quote. Expected: Issued, $100, and an issue timestamp. Note the
       quote ID and time. Click Issue quote again. Expected: Already issued;
       the ID, timestamp, values and saved-document count stay unchanged.
QP-03. In the catalogue, change LAMP description to Desk lamp - new finish and
       price to 45. Click Save catalogue. Expected: Q-001 / r1 still says Desk
       lamp at 40, total $100. View details shows the full saved descriptions.
       Close this file, reopen it, click Load example, and select Q-001 / r1.
       Expected: original values, original quote ID and issue timestamp remain.
QP-04. Click New quote, then Create. Expected: Q-002 / r1, Draft, $110, new lamp
       description and price 45. Select Q-001 / r1 again; it remains $100.
QP-05. With Q-001 / r1 selected, click Create revision, then Cancel. Expected:
       no new saved document; original stays selected. Repeat and Continue.
       Expected: Q-001 / r2, Draft, $100, copied from r1 with lamp price 40.
       Its previous-revision ID matches r1; its own quote ID is different.
QP-06. Immediately repeat Create revision and Continue on the selected r2 draft.
       Expected: existing draft is kept, not duplicated. Also select r1 and
       Create revision again: its existing r2 is selected, not duplicated.
QP-07. On r2, change the line-1 price directly to 42. Click Save draft, then Issue
       quote. Expected: Q-001 / r2 is Issued at $104. Q-001 / r1 stays Issued at
       $100; Q-002 / r1 stays Draft at $110. Reopen, Load example and select each
       row again. Verify values, revision links and issue timestamps persist.

DRAFT AND CATALOGUE POLICY
QP-08. Select the still-Draft Q-002 / r1. Change the catalogue lamp price to 50
       and Save catalogue. Expected: Q-002 retains its copied 45 price and $110
       total. Issuing it must use those saved values, not silently fetch 50.
       Leave it Draft until you finish the failure/recovery exercises below.
QP-09. On Q-002, enter a different line-1 price but do not Save draft. The heading
       continues to show the SAVED total. Try Issue quote or select another row.
       Expected: save/discard guidance; draft entry is retained. Click Discard
       edits, Cancel: entered value remains. Discard edits, Discard: saved values
       return. Discard applies to BOTH unsaved catalogue and quote entry fields.
QP-10. Change a draft Product ID to MAT, then click Copy product on that line.
       Expected: saved catalogue MAT description and price copied into entry
       fields; quantity retained. Save draft persists them. Changing Product ID
       alone must be rejected by Save draft until Copy product has been used.
       Use Discard edits to return to the saved version when appropriate.
       Copy product also deliberately refreshes a SAME-product draft entry from
       current catalogue values; it can overwrite negotiated description/price.
       It does not save until Save draft is clicked and is unavailable on Issued.

VALIDATION, FAILURE AND RECOVERY — USE A DRAFT
QP-11. Try blank, UNKNOWN and an unavailable Product ID with Copy product.
       Expected: useful error and no change to saved lines. To make LAMP
       unavailable, set its catalogue Available to 0 and Save catalogue.
       New quote must be rejected without adding a document. Existing issued
       quotes remain readable. Restore Available to 1 to continue.
QP-12. Quantity accepts whole values 1–100. Try blank, 0, -1, 1.5, abc, 101,
       then valid 1, 10 and 100. Price accepts 0–99999.99 with decimal dot and
       at most two decimal places. Try blank, -1, abc, 1,50, 1.234, 100000,
       then valid 0, 42 and 42.50. Save draft must reject invalid text while
       retaining entries. Correct it and save; Discard must restore saved values.
       Restore the demonstration quantities/prices after these boundary checks.
QP-13. Catalogue inputs use the same price rules. Available must be exactly 0
       or 1. Descriptions require 1–80 characters on one line. Test blank and
       81-character descriptions, then a valid long description. Invalid Save
       catalogue changes neither product. Correct and save, then reopen and Load
       example to confirm persistence. The input fields can scroll horizontally;
       View details displays full SAVED quote descriptions in a dialog.
QP-14. Select a saved draft with no unsaved quote edits. Click Try rejected issue,
       then Cancel: nothing changes. Repeat and Try. The script intentionally
       attempts an empty required quote-version key inside the issue transaction.
       Expected: validation failure, Draft state, no issue timestamp, unchanged
       quote ID and lines, unchanged history count. Close/reopen, Load example,
       select it and confirm again. Normal Issue quote should then succeed.
       If the rejected issue is saved, stop and report that finding. This is an
       owner-operated teaching exercise, not a claim of a completed runtime test.
QP-15. After Save draft, repeat Save draft: one document and two lines remain.
       Repeat Load example: it reloads saved values without resetting history.
       An explicitly confirmed New quote intentionally creates another document;
       it is not a retry action. Cancel New quote makes no document. Six saved
       documents (including revisions) are supported. Further creation must be
       rejected; selection, repeat Issue and reuse of an existing revision remain
       possible. Use a new extracted copy for a fresh exercise; there is no reset.

REVIEW PRESENTATION
Check labels, focus order, edited-field Save, read-only issued lines, full View
Details text, confirmations, last-action messages and close/reopen behavior.
Product IDs are deliberately typed as LAMP or MAT, followed by Copy product.
The fixed desktop layout is 1280 x 920 logical points. Native font/layout fit and
resizing are unverified; report any clipping or awkward controls you encounter.
Tooltips are outside the requested test scope.

LIMITS AND EVIDENCE
- Single user, one file, two product choices, two lines per quote, six documents.
- One currency labelled USD; no currency conversion, tax or legal/accounting claims.
- Availability is a non-destructive catalogue eligibility flag, not deletion.
  No UI deletes products or issued quotes. Snapshot descriptions/prices are saved
  on Lines; reading an issued quote does not depend on an available product.
- Issued-state protection applies to this teaching interface. The file is unlocked
  for learning; Full Access tools can modify data/schema. It is not tamper-proof.
- No hosted/multi-user, Windows, Go, WebDirect, earlier-version or PDF testing.
  Hosting and external automation grants were not enabled for this example.
- Build/export used FMUpgradeTool and FMDeveloperTool 26.0.2.219. Structural
  comparison passed; HTML previews are only approximations. No FileMaker Pro
  scripts were executed for agent testing. Native acceptance remains pending.

Please report the case ID, selected quote/revision, exact input and actual result.
Keep your edited review file: follow-up fixes should preserve your latest saved,
closed copy rather than rebuild over your work.

Reference for copied values:
https://help.claris.com/en/pro-help/content/lookups.html
Transaction reference:
https://help.claris.com/en/pro-help/content/commit-transaction.html
This implementation uses explicit scripted copying and transactions; a lookup
alone does not make an issued document immutable.
